package com.ruoyi.express.third.util;

import java.util.List;
import java.util.Map;

/**
 * 
 * @Title: ResultDto.java
 * @Description: 结果dto
 * @author chenck
 * @date 2016年3月16日 下午6:34:27
 * @version V1.0
 */
public class ResultDto {

    /** 请求成功 */
    public final static String SUCC = "T";
    /** 请求失败 */
    public final static String FAIL = "F";
    /** 超时（含连接超时、读取超时两种情况） */
    public final static String TIMEOUT = "timeout";
    
    /**
     * 响应内容输出到文件<br>
     * 当bizRetCode字段值为response_output_to_file时，表示本次请求的响应内容输出到文件，否则，
     * 将响应内容设置到bizDataObj并返回
     */
    public final static String RESPONSE_OUTPUT_TO_FILE = "response_output_to_file";

    /**
     * 返回码，默认为false
     */
    private String retCode = SUCC;

    /**
     * 返回描述信息
     */
    private String retMsg = "ok";

    /**
     * 具体业务的返回码
     */
    private String bizRetCode;

    /**
     * 具体业务的描述信息
     */
    private String bizRetMsg;

    /**
     * 具体业务返回的数据
     */
    private Object bizDataObj;

    /**
     * sessionId
     */
    private String sessionId;

    /**
     * token
     */
    private String token;

    /**
     * 代理IP
     */
    private String proxyIp;

    /**
     * 响应头属性
     */
    Map<String, List<String>> headerFields;

    /**
     * 判断处理结果
     * 
     * @return true表示成功，false表示失败
     */
    public boolean isSuccess() {
        return checkRetCode(SUCC);
    }

    public boolean isFail() {
        return checkRetCode(FAIL);
    }

    /**
     * 判断是否超时（含连接超时、读取超时两种情况）
     * 
     * @return
     * @author chenck
     * @date 2017年3月8日 下午4:11:18
     */
    public boolean isTimeout() {
        return checkRetCode(TIMEOUT);
    }

    /**
     * 检查返回码
     * 
     * @return
     * @author chenck
     * @date 2017年3月8日 下午4:08:48
     */
    public boolean checkRetCode(String retCode) {
        if (retCode.equals(getRetCode())) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @Description: 响应内容是否输出到文件
     * @author chenck
     * @date 2017年3月1日 下午11:13:53
     */
    public boolean isOutputToFile() {
        if (RESPONSE_OUTPUT_TO_FILE.equals(getBizRetCode())) {
            return true;
        } else {
            return false;
        }
    }

    // getter and setter ....

    public String getRetCode() {
        return retCode;
    }

    public void setRetCode(String retCode) {
        this.retCode = retCode;
    }

    public String getRetMsg() {
        return retMsg;
    }

    public void setRetMsg(String retMsg) {
        this.retMsg = retMsg;
    }

    public String getBizRetCode() {
        return bizRetCode;
    }

    public void setBizRetCode(String bizRetCode) {
        this.bizRetCode = bizRetCode;
    }

    public String getBizRetMsg() {
        return bizRetMsg;
    }

    public void setBizRetMsg(String bizRetMsg) {
        this.bizRetMsg = bizRetMsg;
    }

    public Object getBizDataObj() {
        if (null == bizDataObj) {
            return "";
        }
        return bizDataObj;
    }

    public void setBizDataObj(Object bizDataObj) {
        this.bizDataObj = bizDataObj;
    }

    public String getSessionId() {
        return sessionId;
    }

    public void setSessionId(String sessionId) {
        this.sessionId = sessionId;
    }

    public String getProxyIp() {
        return proxyIp;
    }

    public void setProxyIp(String proxyIp) {
        this.proxyIp = proxyIp;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public Map<String, List<String>> getHeaderFields() {
        return headerFields;
    }

    public void setHeaderFields(Map<String, List<String>> headerFields) {
        this.headerFields = headerFields;
    }

    @Override
    public String toString() {
        if (null != this.bizDataObj) {
            return this.bizDataObj.toString();
        }
        StringBuilder sb = new StringBuilder();
        sb.append("[retCode=").append(this.retCode).append(",");
        sb.append("retMsg=").append(this.retMsg).append("]");
        return sb.toString();
    }
}
